package cool.webstudy.admin.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import cool.webstudy.admin.model.dto.competition.team.*;
import cool.webstudy.admin.model.vo.competition.team.PaginationQueryCompetitionTeamInfoListVO;
import cool.webstudy.admin.model.vo.competition.team.QueryCompTeamDetailWithLoginInfoVO;
import cool.webstudy.admin.model.vo.competition.team.QueryCompTeamHostNetInfoVO;
import cool.webstudy.admin.model.vo.competition.team.QueryOwnCompTeamHostWithLoginInfoVO;

import java.util.List;

/**
 * @author 莫振双
 * @date 2025/1/23 11:59
 * @description: 赛事队伍服务接口
 */
public interface CompetitionTeamService {
    /**
     * @param dto 赛事队伍信息
     * @return Boolean 创建成功返回true，否则返回false
     * @description: 创建赛事与参赛队伍关联关系方法
     */
    Boolean createCompetitionTeam(CreateCompetitionTeamDTO dto);

    /**
     * @param dtoList 赛事队伍信息列表
     * @return Boolean 批量创建成功返回true，否则返回false
     * @description: 批量创建赛事与参赛队伍关联关系方法
     */
    Boolean batchCreateCompetitionTeam(List<CreateCompetitionTeamDTO> dtoList);

    /**
     * @param competitionUnCode 赛事业务主键
     * @return List<QueryCompTeamDetailInfoDTO> 赛事队伍信息列表
     * @description: 查询赛事队伍信息列表方法
     */
    List<QueryCompTeamDetailInfoDTO> queryCompTeamDetailInfoList(String competitionUnCode);

    /**
     * @param dtoList 赛事队伍信息列表
     * @description: 批量更新赛事队伍flag信息方法
     */
    void batchUpdateCompetitionTeamFlag(List<UpdateCompetitionTeamFlagDTO> dtoList);
    /**
     * @param competitionUnCode 赛事业务主键
     * @param teamUnCodeArr        参赛队伍业务主键数组
     * @return Boolean 存在返回true，否则返回false
     * @description: 判断是否存在赛事队伍关联记录方法
     */
    Boolean isExistRecord(String competitionUnCode, String[] teamUnCodeArr);
    /**
     * @param dtoList 赛事队伍信息列表
     * @description: 批量更新赛事队伍登录信息方法
     */
    void batchUpdateCompetitionTeamLoginInfo(List<UpdateCompTeamLoginInfoDTO> dtoList);
    /**
     * @param dto 分页查询赛事队伍信息列表接口请求模型
     * @return Page<PaginationQueryCompetitionTeamInfoListVO> 分页查询赛事队伍信息列表接口响应模型
     * @description: 分页查询赛事队伍信息列表方法
     */
    Page<PaginationQueryCompetitionTeamInfoListVO> paginationQueryCompetitionTeamInfoList(PaginationQueryCompetitionTeamInfoListDTO dto);
    /**
     * @param unCode 赛事队伍业务主键
     * @return QueryCompTeamDetailWithLoginInfoVO 赛事队伍包含登录详细信息
     * @description: 查询赛事队伍包含登录详细信息
     */
    QueryCompTeamDetailWithLoginInfoVO queryCompTeamDetailWithLoginInfo(String unCode);
    /**
     * @return QueryOwnCompTeamDetailInfoWithLoginInfoVO 查询当前登录用户的队伍参赛主机登录信息接口响应参数模型
     * @description: 查询当前登录用户的队伍参赛主机登录信息接口
     */
    QueryOwnCompTeamHostWithLoginInfoVO queryOwnCompTeamDetailInfoWithLoginInfo();
    /**
     * @param flag flag
     * @return QueryCompTeamDetailInfoDTO 查询赛事队伍详细信息接口响应模型
     * @description: 根据flag查询赛事队伍详细信息接口
     */
    QueryCompTeamDetailInfoDTO queryCompTeamDetailInfoByFlag(String flag);
    /**
     * @param compUnCode 赛事业务主键
     * @param teamUnCode 队伍业务主键
     * @param score  分数
     * @param isAdd  是否增加积分，true为增加，false为减少
     * @return Integer 更新后的分数
     * @description: 更新赛事队伍积分方法
     */
    Integer updateCompTeamScore(String compUnCode,String teamUnCode, Integer score,Boolean isAdd);
    /**
     * @param dtoList 赛事队伍信息列表
     * @description: 批量更新赛事队伍积分方法
     */
    void batchUpdateCompetitionTeamScore(List<UpdateCompetitionTeamScoreDTO> dtoList);
    /**
     * @param competitionUnCode 赛事业务主键
     * @return List<QueryCompTeamHostNetInfoVO> 查询赛事队伍参赛主机网络信息接口响应模型
     * @description: 查询赛事队伍参赛主机网络信息接口
     */
    List<QueryCompTeamHostNetInfoVO> queryCompTeamHostNetInfoList(String competitionUnCode);
}
